﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TogheterWeBuyIt.Models;
using TogheterWeBuyIt.Models.Repositories;

namespace TogheterWeBuyIt.Controllers
{
    public class LivroController : Controller
    {
		LivroRepository repLivro = new LivroRepository();
		DesejaProdutoRepository repDesejo = new DesejaProdutoRepository();
		CidadeRepository repCidade = new CidadeRepository();
		ProdutosRepository repProd = new ProdutosRepository();

		public ActionResult Index(Livro livro)
		{
			IQueryable<Livro> livros = null;

			if(!string.IsNullOrEmpty(livro.Nome))
				livros = repLivro.GetLivros(livro.Nome);

			if(livros == null && !string.IsNullOrEmpty(livro.Autor))
				livros = repLivro.GetLivrosPorAutor(livro.Autor);
			else if(!string.IsNullOrEmpty(livro.Autor))
				livros = livros.ToList().FindAll(p => p.Autor.Contains(livro.Autor)).AsQueryable();



			if (livros != null && livros.Count() == 0)
			{

				List<Livro> livrosList = new List<Livro>() { livro};
				livros = livrosList.AsQueryable();
			}

			return View(livros);
		}

		[HttpPost]
		public ActionResult Index(FormCollection collection)
		{
			if (Session["LoggedUserId"] != null)
			{
				string nome = collection["TxbNome"];
				string autor = collection["TxbAutor"];

				decimal preco = decimal.Parse(collection["TxbPreco"]);
				DateTime dataInicio = DateTime.Parse(collection["TxbDataInicio"]);
				DateTime dataFim = DateTime.Parse(collection["TxbDataFim"]);

				int idProd = _InsereLivro(nome, autor);

				DesejaProduto desejo = new DesejaProduto()
				{
					DataFim = dataFim,
					DataInicio = dataInicio,
					IdProduto = idProd,
					IdUsuario = (int)Session["LoggedUserId"],
					PrecoMax = preco,
					DataCriado = DateTime.Now
				};

				repDesejo.Add(desejo);

				return RedirectToAction("Details", "DesejaProduto", new { id = idProd });
			}

			return RedirectToAction("LogIn", "Usuario");
		}

		private int _InsereLivro(string nome, string autor)
		{
			Livro livro;

			int idProd = repProd.Add(new Produto() { IdTipo = ETipoProduto.Livro });

			livro = new Livro()
			{
				IdProduto = idProd,
				Nome = nome,
				Autor = autor
			};

			repLivro.Add(livro);
			return idProd;
		}

		[HttpPost]
		public ActionResult Join(FormCollection collection)
		{
			int idProd = int.Parse(collection["IdProd"]);
			Livro outrosProd = repLivro.GetLivro(idProd);

			if (collection["IsToJoin"] == null)
				return View(outrosProd);
			else if (bool.Parse(collection["IsToJoin"]))
			{
				if (Session["LoggedUserId"] != null)
				{
					decimal preco = decimal.Parse(collection["TxbPreco"]);
					DateTime dataInicio = DateTime.Parse(collection["TxbDataInicio"]);
					DateTime dataFim = DateTime.Parse(collection["TxbDataFim"]);

					DesejaProduto desejo = new DesejaProduto()
					{
						DataFim = dataFim,
						DataInicio = dataInicio,
						IdProduto = idProd,
						IdUsuario = (int)Session["LoggedUserId"],
						PrecoMax = preco,
						DataCriado = DateTime.Now
					};

					repDesejo.Add(desejo);

					return RedirectToAction("Details", "DesejaProduto", new { id = idProd });
				}
				else
					return RedirectToAction("LogIn", "Usuario");
			}
			else
				return View();
		}

		//
		// GET: /PassagemAviao/Details/5

		public ActionResult Details(int id)
		{
			return View();
		}

		//
		// GET: /PassagemAviao/Create

		public ActionResult Create()
		{
			return View();
		}

		//
		// POST: /PassagemAviao/Create

		[HttpPost]
		public ActionResult Create(FormCollection collection)
		{
			try
			{
				// TODO: Add insert logic here

				return RedirectToAction("Index");
			}
			catch
			{
				return View();
			}
		}

		//
		// GET: /PassagemAviao/Edit/5

		public ActionResult Edit(int id)
		{
			return View();
		}

		//
		// POST: /PassagemAviao/Edit/5

		[HttpPost]
		public ActionResult Edit(int id, FormCollection collection)
		{
			try
			{
				// TODO: Add update logic here

				return RedirectToAction("Index");
			}
			catch
			{
				return View();
			}
		}

		//
		// GET: /PassagemAviao/Delete/5

		public ActionResult Delete(int id)
		{
			return View();
		}

		//
		// POST: /PassagemAviao/Delete/5

		[HttpPost]
		public ActionResult Delete(int id, FormCollection collection)
		{
			try
			{
				// TODO: Add delete logic here

				return RedirectToAction("Index");
			}
			catch
			{
				return View();
			}
		}
	}
}
